from typing import List, Type, TypeVar

T = TypeVar('T')  # 目标类型
S = TypeVar('S')  # 源类型


class CopyTools:
    @staticmethod
    def copy_list(s_list: List[S], classz: Type[T]) -> List[T]:
        """
        复制对象列表。
        :param s_list: 源对象列表
        :param classz: 目标对象的类型
        :return: 目标类型对象列表
        """
        result = []
        for s in s_list:
            t = classz()  # 创建目标类型实例
            # 手动复制属性
            for key, value in vars(s).items():
                setattr(t, key, value)
            result.append(t)
        return result

    @staticmethod
    def copy(s: S, classz: Type[T]) -> T:
        """
        复制单个对象。
        :param s: 源对象
        :param classz: 目标对象的类型
        :return: 目标类型对象
        """
        t = classz()  # 创建目标类型实例
        # 手动复制属性
        for key, value in vars(s).items():
            setattr(t, key, value)
        return t
